Rhys Cornelious
University of Waterloo Biomedical Engineering Class of 2025
(519)-328-8769
rhyscornelious@gmail.com
318 Spruce St. Waterloo, ON
N2L 3M7
In: Rhys Cornelious
github.com/RhysCornelious
Hi, my name is Rhys Cornelious. If there was one thing that I
want you to take away from reading this portfolio, it is my
passion for learning. Outside of engineering, this has led me to
become a private and glider pilot, scuba diver, hiker, fisher,
(half) marathon runner, and more. I made this portfolio to
provide a succinct document that can provide a better
understanding of who I am and the work I have done.
Whether you read every word, or just skim, I hope that this
document helps you understand my qualifications, but more
importantly it conveys my passion to learn and grow as an
engineer.
About Me
Quick Facts
- I love the outdoors, and going hiking, camping, as well as fishing. As of right
now, the Rocky Mountains and Algonquin are my favourite sites to visit.
- I am both a private and glider pilot. I gained both of these licenses through
scholarships earned while in the air cadet program.
- Through my previous co-op work experiences, as well as personal and school
projects, I have developed a love for electrical and PCB design. Most of the
projects detailed in this document are at least partly related to this field.
- I have always been very interested in the automotive field. I initially gained an
interest through my time in aviation and joined the Formula Electric design
team at UW to get more experience in the area.
PCB Business Card
Personal Project
My goal when beginning this project was to learn more about
interfacing microcontrollers and using NFC tags while creating a
unique business card. I wanted to include a game that could be run
on a small microcontroller without using too many LEDs, allowing
it to fit cleanly on a business card. The game that I settled on was
lights out, as it requires just 25 LED’s to run. I also wanted to
include a way to show more about myself than what I could put on
the silkscreen. Initially I thought of using a QR code, but I thought
that using an NFC transponder would be a lot cooler and let me
learn about antennae design.
The prototype was assembled using spare LEDs, buttons, and
breadboards I had lying around, an Arduino Uno, and some
demultiplexers. Each multiplexer controls a row of LED’s and cycles
through them, turning it’s output high or low depending on a
Boolean table. The current location of the player is indicated by a
flashing LED. The buttons are associated with moving the current
location up, down, left, and right, with the final button being the
selection button. When powered on, the user is given a randomly
generated array of LED’s. When they select a tile and the lights
change the code checks to see if the user has won, and if they have it
then flashes all lights until it receives any input, at which point it
gives the user a random board again.
Prototype
Key Takeaways and Future Considerations
I learned a lot about antennae design when working on this project.
It had never occurred to me how intricate they need to be to be able
to fit in such small chips. I also had never used microcontrollers on
external boards before. This let me work with bootloading software
onto a microcontroller for the first time. I used an ATmega328 as it
could have the Arduino Uno code I used in the prototype uploaded
directly to it. In the future it would be fun to try to get the project
working with a smaller, more inexpensive controller.
I spent a long time making sure the PCB was as organized and neat
looking as possible. As can be seen when comparing the 2D and 3D
views in Altium, the majority of the components are mounted to the
rear side of the card so the front looks minimal and professional. The
board was kept at 2 layers as a ground plane was not necessary for the
proper functionality of the microcontroller and would greatly hinder
the NFC tag’s performance. While this did make the routing more
difficult, by carefully placing all components it was not impossible to
get all traces to remain short and organized. The NFC tag was new to
this part of the design. I had not used them before, and spent a long
time researching antennae guidelines and models. I managed to find
some template models from the company NXP which saved me from
having to place all of the traces meticulously myself. This circuit is
completely separated from the rest of the design. A 3V coin cell
battery connected to an on/off switch powers the microcontroller
and circuitry, while the NFC circuit is completely self-powering. If
you are interested, you can find my design here.
PCB Design
EEG Video Game Controller
BME 294L/Side Project
This project was completed with the intent of differentiating between
alpha and beta waves from a user. Initially the system was designed on
a breadboard, after which I made an optimized version in Altium.
Following this, the goal was to create a modified version of Flappy
Bird with the users’ inputs being concentration and relaxation.
Objective
This system obtains its two differential signals from electrodes placed
in the FP2 and O2 regions. These two signals are passed through a 6
stage filtration and variable amplification system to ensure signals
are clear and analog to digital conversion is precise. Once the
filtration is complete, it is converted to a digital signal and sent to a
Raspberry Pi for data analysis. Initially, a prototype was designed and
tested using a breadboard. A PCB has now been designed to reduce
noise; thus increasing signal accuracy and integrity.
Overview
Design Choices
The first interesting choice is the use of 3.3V as the ground
reference for all filters. This is done to prevent any negative
voltages from reaching the ADC, as the component
utilized does not handle these values accurately. Another
important feature is the use of a potentiometer to give the
circuit a variable gain. This is important to account for
the differences in signal magnitude that different users
produce. An important feature of the PCB is the
placement of a solid ground plane immediately below the
top layer, where the signal travels. This greatly lowers the
amount of noise which is very important when working
with such delicate signals. Finally, the layout of the board
is somewhat atypical, as it is long and narrow. This is to
provide a clear representation of the step-by-step signal
processing method.
Stage Breakdown
Stage 1 – Instrument Amplifier: Amplifies difference between O2
and FP2 electrodes with a gain of ~92x.
Stage 2 – Notch Filter: Cutoff frequency of ~60Hz to remove power
line interference, gain of 1.
Stage 3 – High-Pass Filter: Used for noise removal, has a cutoff
frequency of ~5Hz and a gain of 1.
Stage 4 – Low-Pass Filter: Used for noise removal, has a cutoff
frequency of ~5Hz and a gain of 1.
Stage 5 – Instrument Amplifier: Amplifies signal magnitude using
potentiometer for a gain of ~46-500 as required.
Stage 6 – Notch Filter: Cutoff frequency of ~60Hz to once again
remove power line interference, gain of 1.
Key Takeaways and Future Considerations
This project was extremely challenging, in large part due to the
number of stages, and the miniscule magnitude of the signals being
measured. Any time the circuit did not perform as expected the
debugging process was tedious as there were many places where
things could have gone wrong. It was extremely important to break
the system down into individual stages to get accurate information
on where issues arose. Signal preservation was also something that I
learned a lot about, as our initial system would produce a distorted
signal if you as much as blew on some parts of it. The game
development in this project is still ongoing, and you can learn more
about here. If you want to take a closer look at the electrical system
schematic and PCB design, you can find them all here.
Photoacoustic Remote Sensing Peak Detector
Photomedicine Labs
The purpose of this peak detector was to both increase the accuracy
and decrease the magnitude of data collection in photoacoustic
remote sensing (PARS) systems. Currently, the peaks of each pulse in
the time domain obtained by taking 64 samples and iterating
through each to find the greatest magnitude. The difficulty lies in
the miniscule pulse wavelength of 20ns, as well as the 50kHz
frequency that they are produced at. The design sought to use an
OPA615 transconductance amplifier due to its minimal capacitance
and high speed. Furthermore, Texas Instruments (the manufacturer)
provides a basic layout for a peak detection circuit that could be
adapted to this high precision application.
The first step in the designing this system was creating a simulation
to gain a better understanding of what components performed at the
level necessary to hold the peaks. LTSpice was utilized as many
companies provide public simulation models of their components,
making it an effective way of comparing different diode and
MOSFET performances. The next step was to create a breadboard,
and subsequent perfboard prototype. The parasitic capacitance in
the breadboard itself meant that the system was unable to capture
small peaks but could easily hold longer pulses and be reset at the
required 50kHz frequency. The perfboard prototype was much more
effective, and despite the great amounts of noise present, it was able
to prove that the system was capable of capturing peaks of pulses
with the same wavelength as the PARS signals.
Simulations + Prototyping
PCB Design
Due to the high-speed nature of the system, the PCB was designed to
be as efficient as possible. Certain design features, such as internal
unbroken ground planes, short and straight signal paths,
decoupling capacitors on all power supplies, and impedance
matching the traces to match the BNC connectors were all crucial to
ensure signal accuracy and clarity. The three most effective diodes
(determined from the simulations) were selected, and two different
boards were designed to have both 1 and 2 diode configurations.
This meant 6 total boards were manufactured and tested. Subsequent
comparisons between the accuracy of their outputs allowed for a
definitive choice of the most effective design.
The first lesson I learned while working on this project was the
importance of accurate simulation. At first, I used the basic diode
and NMOS models in the LTSpice simulations, which provided
excellent results. Upon building an initial breadboard prototype
using parts I had lying around, I was surprised to find that it was
unable to detect pulses with wavelengths an entire order of
magnitude greater than what was desired. This made it clear that
accurate simulation is imperative, as using the idealized components
provided by LTSpice was essentially useless in determining the
system’s efficacy. Another big takeaway from this project was the
importance of prototyping for proof of concept. The diodes used for
the PCB all had a footprint of just 0.3x0.6mm, meaning they were
simply impossible to solder by hand. Unfortunately, no larger diodes
were able to match their performance in simulation. To get around
this, a diode that was larger and provided much worse component
was used, as a proof of concept was all that was necessary. To look at
the final board design, please look here.
Key Takeaways and Future Considerations
Soft/Rigid Hybrid Robotic Hand
University of Waterloo Microfluidics Lab
This project aimed to utilize pneumatic soft actuators to create a
biomimetic grasping hand. Due to the highly compliant nature of
the actuators, the design was intended to provide a less rigid grasping
feel than typical cable and pully prosthesis. Main issues to overcome
included reducing off plane instability, preventing actuator bulging,
and ensuring hand dexterity. Due to the infancy of the research
project, novelty and creativity was very important for developments.
Objective
A great amount of iterations were made, far too many to discuss in
this brief summary. Instead I will touch on a few key features and
why they are so important. The first is the complaint hinge design
that removed the need for pin joints. This also made the interior of
the design feel much more like a real hand. A downfall of this was
great instability, a problem a solved using internal twisting guards.
guards. . These maintained a constant centre of
of . rotation for each joint and stopped
stopped . them from bending and twisting in
u . unwanted directions. The final major
d design innovation was a low profile
profile . bulging preventor. This slim design
design . allowed the fingers to remain slender
slender . and prevented the actuators
tendency to bulge outward. All of these changes were novel ideas,
and allowed the concept of soft actuators to be functional in such a
complex system. Rapid
prototyping was used
to create all designs
which were created .
using SOLIDWORKS
and AutoCAD.
Physical Design
Gyroscope Tracking
To generate feedback for the angles of each joint, a miniature PCB
was designed for the utilization of the MPU-6050 gyroscope and
accelerometer module. This highly optimized design allowed the
boards to fit inside even the smallest pieces of the hand and provide
system feedback. A small 2 layer board was designed using EAGLE
and ordered for manufacturing. All board information was obtained
through I2C communication and processed using Arduino.
Key Takeaways and Future Considerations
A major takeaway I gained from this project was that I really enjoy being creative in my design solutions. The problem I was given was
extremely open ended and allowed me to try out a variety of ideas to solve the critical problems that the system faced. For each successful idea
you see here, there are at least 10 sub-par prototypes that were needed to achieve the final product. I got a lot of enjoyment from this type of
problem. Additionally, I further confirmed my love for multidisciplinary problems. Here I was able to use physical design, electrical design,
and software development to create a polished final project. I find that there is nothing more satisfying than when all of these fields come
together and integrate into a smoothly functioning final product. Having the knowledge of how each and every system works allows me to
effectively adapt them to aid each others’ weaknesses. For my work, I am being included in the authorship of a paper that was accepted in the
32nd IEEE International Conference on Robot and Human Interactive Communication (IEEE RO-MAN 2023).
CNC Drawing Robot
Personal Project
The end goal of this project was to design a robot that could draw an
image when provided G-code instructions. 2 stepper motors were
to control the X and Y axis of the robot, while a servo was
implemented to adjust the pen tip height (Z axis). An Arduino,
equipped with a modified version of GRBL allowing for the use of
servos was used as the control system, interfaced with the stepper
motors using a simple motor shield. All components were designed
in SOLIDWORKS and produced using additive manufacturing.
The system was designed to use two steppers motors for the X and
Y axis. The first motor was connected to a static part of the system,
and thus drove the movement of the rest of the apparatus along the X
axis. The second motor was fixed to an apparatus that travelled along
the X axis and drove the motion of the pen along the Y. Both of these
axis used rubber timing belts to provide and easy and accurate
driving system. The final component, the servo motor, was
mounted a opposite the marker/pen on the Y axis and connected via
a length of fishing line. When it spun, the pen was pulled upwards
against a small spring fixed within its holder. This spring ensured
that the fishing line was always under tension which was mandatory
to make sure that the marker/pen in use was stable enough to
produce a quality drawing.
Designing the Physical System
Electrical/Software Components
The electrical system was quite basic and used an Arduino motor
shield to control all inputs and outputs. The key components
included the motors, servo, and contact switches which provided the
driving power and system feedback. The Arduino runs a modified
version of GRBL called Mi-GRBL, the details of which can be
found here. This allows it to control the servo motor in the Z axis.
The G-Code instructions were generated using ChiliPeppr and
uploaded directly to the Arduino. Overall, this was quite a simple
process, and only required some fine tuning through the inputting of
the dimensions and desired drive speeds, accelerations, etc.
Key Takeaways and Future Considerations
The first large takeaway from this project was to take a deeper look
into the mechanics of the system prior to manufacturing. A large
issue appeared when the upper timing belt began to rub against
itself. The pulley system was designed to maintain tension across the
axis, thus ensuring the teeth on the stepper motor would not lose
their grip. The mounting points for this belt were centered on each
opposing side of the axis, however, resulting in the belt rubbing
against itself in the first iteration of the design. While quickly adding
slots for the belts to run through was not difficult, it was an
important lesson in planning well to prevent having to redesign the
parts. Another lesson is to be sure of the tolerance capabilities of the
manufacturing method used, as some printed parts needed to be
scrapped after the set screws did not bite or the metal rods were
unable to fit.
Flashing Bike Light
Personal Project
The purpose of this project were to design and fabricate an up-
counter from a crystal oscillator, four 4-channel multiplexers, two 8-
channel D flip-flops, and four 4-channel adders which would
consequently be used to drive a flashing LED for my bike. The
system should be robust enough to be easily mounted to the back of
my bike seat and be turned on and off with the press of a button.
Simulation of the binary logic was completed using Falstad, a free
online circuit simulation tool. This acted as a proof of concept for
the design and was helpful in determining the logic behind resetting
the counter. The first prototype was designed using a breadboard,
allowing me to build the system in small steps and ensure the
functionality of each component independently. First, the waveform
of the quartz oscillator was obtained using a oscilloscope.
Functionality was then confirmed using a single multiplexer, D
flip-flop register, and adder. Once the entire binary system was
designed, an oscilloscope was once against used to iterate through
each channel of the flip flop to ensure the wavelength of each
channel doubled as they increased in value. Using a basic diode was
helpful to provide a confirmation of the timing of the light turning
on or off. Once this was complete, the addition of the secondary
power source and MOSFET to drive the lighting of the stronger
LED’s was a simple final touch on the system.
Simulation/Initial Prototype
PCB/Enclosure Design
A basic 2-layer PCB was more than enough for all required
connections. The outline of the board was designed to be a long
rectangle that would allow it to be aligned with the bike seat and not
impede pedalling. By first routing all signal paths, it was relatively
simple to ensure there were no 90 degree angles or excessively long
paths. Following this, constant voltage sources, such as power
supplies, grounds and enable signals were routed as trace length
efficiency was less important in these connections. The power
connections for both the logic and LED power sources were
implemented using vias that allowed connections to be easily
soldered. The container was designed in SOLIDWORKS to house
the PCB, power supply and LEDs while mounting seamlessly onto
my bicycle seat facing backwards for oncoming traffic to see.
Key Takeaways and Future Considerations
Segmentation was vital in the prototyping of this design. Due to the large number of connections, it was very important to break the circuit
into smaller subsystems that could be validated before incorporation into the final product. This greatly helped to reduce the amount of time
it took to debug the system and get the breadboarded model functional. An oscilloscope was used to test the waveforms of the in and outputs
of each gate in the two registers. Furthermore, an issue was encountered in the use of the MOSFET to turn the light on and off. I found that
the light would remain in whatever state it was manually set to and needed to be externally grounded to turn off. I realized that I had not
factored in the need for a pull-down resistor that would allow for the dissipation of voltage in the drain of the component. Fortunately I had
made a similar error in a previous project (See AED Emulation for more information) and was thus able to quickly determine what the issue
was by drawing on my previous knowledge. If you would like to view the PCB design, you can find it here.
AED Emulation
BME 393L Final Project
The goal of this project was to accurately emulate an AED using an
Arduino as a Moore FSM. We aimed to adjust the speeds of multiple
built in Arduino timers used to run concurrent events. Furthermore,
multiple interrupts were implemented; all connected to a common
pin, with a multiplexer used to decipher interrupt meanings.
Objective
This system aims to emulate an AEDs functionality as closely as
possible through the use of a Moore FSM. Currently, the system is
sent a state encoded heart rate which allows it to determine whether
or not a shock is advised. If a shock is advised, the user is prompted
through the series of steps required to administer it using interrupts.
The system also walks the user through the process of administering
CPR and then reclassifying the heart rate and continues its cycle. The
system has 6 inputs and 9 different LED outputs that utilize a
MUX to minimize the pins necessary for its operation. Multiple
Arduino timers are utilized at adjusted speeds, achieved through
adjusting the scaling values timers’ registers.
Overview
Electrical System
One of the key aspects of the electrical system is the ability to capture
multiple different interrupts on the same interrupt pin. This was
achieved using diodes forward biased to face the interrupt pin. Here
they performed the function of allowing current to flow from the
button pressed towards the interrupt pin but not the other way. By
attaching an additional connection to a separate pin upstream of the
diode, it was possible to check which button had been pressed
immediately after the interrupt was fired. This prevented the other
buttons from being pulled high while providing the differentiation
between each. Another important aspect was the multiplexer, which
allowed for the use of an Arduino Uno rather than a Mega without a
pin shortage.
Achieving a Moore FSM
The system had a total of 10 states that were encoded with 4
Boolean values. The state encoding values allowed the system to
easily decipher what processes should be occurring and transition
seamlessly between states based off of inputs to the system. It also
allowed for the differentiation of certain interrupts to optimize the
circuitry needed. In conjunction with the timer information, these
states were used to decipher which outputs should be sending
information to the system at what times and provided an easy way to
organize the FSM.
Key Takeaways and Future Considerations
One of the main takeaways that I gained from this project was a
realization of how useful FSMs can be in the integration of hardware
and software. The set states provided a much easier debugging
process than an analog system would have. Furthermore, I was able
to apply some theoretical electrical system knowledge to solve a real
problem. Initially, there were no pull-down resistors upstream of the
diodes used for interrupts, which meant that when a different
button was pressed, all of the interrupts were pulled high. This was a
really satisfying feature to debug and showed me the importance of
stepping back and trying to understand what was really happening
in a circuit. I am now working on this as a side project, and aim to
incorporate the analog reading, processing, and classification of
heart rate signals to the system.
Force Sensing Mat
University of Waterloo IDEAs Clinic
This project was completed with the intent of use as a teaching aid by
professors at the University of Waterloo. The original plan was for it
to be used in gait analysis for biomechanics courses, and as the project
progressed it became apparent that it would also be a good physical aid
in circuits courses do to the visual depiction of the signal wiring.
Objective
This mat uses a grid of copper tape to create intersection points
spread evenly throughout the mat seen on the right. This grid
consists of vertical and horizontal rows of tape separated by velostat,
a material which changes its resistance when pressure is applied.
This allows impedance samples to be taken at each intersection
point. The other key part in this project is multiplexers, which allow
th systems to cycle through the rows and columns to obtain samples.
By using a daisy chain design of both 8 and 16 port MUXs I was able
to fabricate a matt with 8192 points of detection. These are sent via
serial connection from an Arduino Mega to a PC to be stored and
displayed in real time.
Overview
Electrical System
The multiplexers were all attached to
the Arduino Mega using perf boards,
and to the mat through over 300 ft
of wire. These boards were
organized and soldered as neatly as
possible to allow ease of
understanding when used as a
teaching aid. It is easier to see the
rows of copper tape underneath the
vinyl sheet used to protect the
components within the mat. The
mat is 128x64 rows, and the tabs on
the 64 side are connected to pull
down resistors that allow for the
signal voltages to be dissipated each
time the rows are utilised.
Software Component
There are two scripts required for this project to properly run: one
for the data acquisition (Arduino) and one for the display (PC). The
Arduino component cycles through every point on the map using
four nested four loops correlating to each set of multiplexers. It
then sends the voltages received in each channel through the serial
connection to the PC attached. The PC component uses a Python
library called PYQT to display the information received in a heat
map. Initially MatPlotLib was used, but the efficiency of PYQT was
determined favourable despite the lower amount of documentation
available. A specially assigned signal character is sent each time the
multiplexers cycle back to the first point in the graph, thus allowing
the data gathering and display to be synced.
Key Takeaways and Future Considerations
This project allowed me to gain quite a large amount of experience
in circuit design and fabrication. It also allowed me to gain a deeper
understanding of microcontrollers, their communication with other
PC’s, and their limitations in terms of speed, inputs, and outputs.
The most rewarding part of this project was getting a smaller
prototype to work, as it required me to figure out how to get both
the microcontroller and data visualization codes to run
simultaneously and work together. In the future, speed is the most
important factor to improve. I would like to look into an optimized
detection algorithm that allows the system to test less points until a
significant change is noticed, then increase acquisition in the region.
GoKart Benchtop Electrical System
University of Waterloo IDEAs Clinic
The purpose of the benchtop electrical system is to replicate the
electrical system used in an electric GoKart built by coop students at
the UW IDEAs clinic. This vehicle is used by University of Waterloo
professors when teaching courses covering electrical and autonomous
vehicles. The benchtop electrical system will be extremely helpful
when discussing how the system works, and is laid out in such a way
to make the key components visible and their connections intuitive to
students. To build the enclosure, a mixture of hand manufactured
parts, laser cut acrylic, and mounts from McMaster-CARR were used.
Objective
The system is powered by two 12 volt batteries, which sit next to
the model as they weigh about 30 lbs each and mounting them
using acrylic would not be feasible. The top of the enclosure holds
the two motor controllers used in the system. Both motors sit
inside the enclosure, and the driving motor and generator are
connected by a chain. I designed the enclosure so that the acrylic
sheets, when laser cut, would provide ventilation for the motors
inside, but still protect any user from the chain and sprockets
inside in case anything were to happen. A small handheld controller
provides the user with the ability to drive both engines and utilize
them as generators. It simulates gas and brakes, with switches to
turn on the power supply and to put the motors in reverse. There is
a place on the front right corner for an emergency stop button
which will be incorporated as an additional safety feature.
Key Takeaways and Future Considerations
When working on this project, I had very minimal experience with
circuits and electrical design. This caused me to be very
overwhelmed when first looking at the motor controller diagrams,
and the electrical system already in the GoKart. I learned to break
down these systems so I don’t get overwhelmed when trying to
understand them. This project was also my first-time using McMaster-
CARR and designing parts to be laser cut. Although the majority of
the parts turned out very nicely, I ran into trouble with the mounting
points for the motor controller, as I used dimensions from a similar
part that were slightly different. I had to hand drill the new
mounting holes, making the sheet look sloppy in comparison to what
it should have. This taught me to be very careful when designing to
accommodate for ordered parts and tolerancing in manufacturing.
Description